home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr12
/
qemm70tn.zip
/
BUS-MAST.TEC
next >
Wrap
Text File
|
1993-06-08
|
11KB
|
236 lines
USING BUS-MASTERING DEVICES WITH QEMM
This QEMM 7 technote is an abridged version of a technical
bulletin available through our standard support channels. The
information contained in this version pertains ONLY to QEMM
version 7.0. If you need information relating to earlier versions
of QEMM or if you are interested in a lengthier discussion of this
subject, you can obtain the unabridged version from the following
sources:
Quarterdeck Technical Support BBS: BUS-MAST.TEC
CompuServe: BUSMAS.TEC
Q/FAX: #121
Subject: Notes on bus-mastering devices and why they may require
a Virtual DMA Services (VDS) driver on 386 and higher machines in
Virtual 8086 mode. Owners of SCSI hard drives should read this
note.
PLEASE NOTE: All references to 386 computers or to the 80386
processor, unless otherwise stated, refer to 386 AND HIGHER
processors.
BUS-MASTERING DEVICES, QEMM AND VIRTUAL DMA SERVICES
Q: What is a bus-mastering device and what problems might be seen
when using one?
A bus-mastering device does its own direct memory addressing
(DMA) without going through the machine's processor or its DMA
controller. The most common bus-mastering devices we see
currently are SCSI hard disk controllers, but, technically, other
types of devices could be bus-mastering as well. We have seen
bus-mastering ESDI disk controllers and an increasing number of
bus-mastering network cards as well. The problem seen with bus-
mastering devices is that while they are high-performance devices
and quite often found on 386 and higher systems, they are
unfortunately, in their design, incompatible with one of the most
common operating modes of the 80386 processor -- the Virtual 8086
mode.
If you are using a bus-mastering device on a 386 that is in
Virtual 8086 mode and memory paging is occurring (e.g. when QEMM
is providing High RAM, when QEMM is providing expanded memory, or
when the processor is switching from one virtual machine to
another), your machine will probably hang when you use the bus-
mastering device.
Q: How can the problem with running bus-mastering devices in
Virtual 8086 mode be corrected?
There are four possible solutions:
1) THE BEST SOLUTION: Contact the maker of your bus-mastering
device and see if they have a driver available which supports the
VDS (Virtual DMA Services) specification. VDS is now an industry-
wide specification supported by IBM, Microsoft and Quarterdeck,
as well as many other hardware and software suppliers. A VDS
driver allows a bus-mastering device to find the real physical
address of its data when the processor is in Virtual 8086 mode.
QEMM versions 5.00 and later support the VDS specification. A
VDS driver provides the best solution to this problem in terms of
reliability, speed and memory efficiency. A VDS driver may be
loaded into High RAM if it appears in the CONFIG.SYS file after
the QEMM386.SYS line; you may need a DB= parameter on the
QEMM386.SYS line to accomplish this; see section 5 below.
2) Similarly, the drivers of many bus-mastering hard disks have
proprietary buffering options. Check the documentation for your
disk controller to see if the driver has a parameter to set up
buffering for disk operations. Some drivers also support
parameters that are specific to 386 operations. For example, the
early Adaptec drivers SCSIHA.SYS and AHA1540.SYS included both
386 and disk buffering options invoked by the parameters "/v386"
and "/b:64." "/v386" stands for virtual 386; "/b:64" allocates a
64k buffer, for DMA.
Unlike the drivers in (1) above, these drivers do not provide VDS
services. If you are using a driver such as this, make sure that
it is not loaded high. The purpose of such a driver is to provide
buffering into physical addresses that are the same as logical
addresses; if the program is loaded high, its buffer will be in
logical addresses that are not the same as their physical
addresses. Please read the section below titled "Making Sure
Your Device Driver Loads Low".
3) Check the documentation for your bus-mastering device and see
if it can be configured to use the BIOS or any one of the
standard DMA channels. QEMM can correct the problem if the BIOS
or standard DMA channels are used.
4) Bus-mastering hard drives can also cause problems for
Microsoft Windows 3. Microsoft's solution is in its SmartDrive
disk cache. SMARTDRV (and other disk caches) contain code that
can buffer direct memory access. Since QEMM and its VDS services
are almost completely disabled when you enter 386 Enhanced mode,
this is a good thing. If you have a bus-mastering disk
controller and wish to run Microsoft Windows in 386 Enhanced mode
while loading any programs high, you must use SmartDrive.
a) As of this writing, Microsoft Windows 3.1 provides you with a
copy of SmartDrive v. 4.0 and DOS 6 ships with version 4.1.
These versions have two functions: to provide disk caching,
through a module loaded in AUTOEXEC.BAT, and to provide buffering
for SCSI hard drives, through a module loaded in CONFIG.SYS. If
you are using Windows 3.1 and a bus-mastering hard drive, and you
are not using any of the options numbered 1 through 3 above, make
sure that the following line appears in CONFIG.SYS:
DEVICE=C:\WINDOWS\SMARTDRV.EXE /DOUBLE_BUFFER
(If your path to SmartDrive differs, change C:\WINDOWS above to
the appropriate path.)
Please read the section below titled "Making Sure Your Device
Driver Loads Low".
b) Windows 3.0 and DOS 5 shipped with SmartDrive version 3 or
lower. If you are using one of these versions of SmartDrive,
make sure that the following line appears in your CONFIG.SYS
file:
DEVICE=C:\WINDOWS\SMARTDRV.SYS
(If your path to SmartDrive differs, change C:\WINDOWS above to
the appropriate path.)
Please read the section below titled "Making Sure Your Device
Driver Loads Low".
5) QEMM's DB=xx (DISKBUF=xx) parameter can prevent QEMM-SCSI
problems at the expense of a little conventional memory. "xx" is
the number of K used for buffering. Any value for xx is
sufficient to correct the problem. DISKBUF=2 would be fine for
most cases. Configuring QEMM with a DISKBUF greater than 2 might
improve disk performance, but setting DISKBUF to more than 10 is
probably a waste of memory.
QEMM version 7 automatically creates a 2K disk buffer when it
detects an addressing problem with a bus-mastering hard drive
controller. It will only do so, however, when QEMM itself is
loaded from that bus-mastering hard drive. If you load a driver
that provides VDS (Virtual DMA Services) support BEFORE you load
QEMM, QEMM will not create the disk buffer. In cases where QEMM
automatically creates this buffer, it does not add a DISKBUF
parameter to the QEMM386.SYS line.
QEMM's automatic detection of bus-mastering hard disks is active
only when the RAM parameter is specified on the QEMM386.SYS line
in the CONFIG.SYS file. You can disable QEMM's automatic disk
buffering by using the QEMM386.SYS parameters DISKBUF=0, but there
is usually no reason to disable this feature. If you have a bus-
mastering hard disk that you do not load QEMM from, QEMM will not
detect bus-mastering conflicts with it, and you must either use
the disk controller's VDS support or specify the DISKBUF=nn.
Use of the DB= parameter will not help in cases where the bus-
mastering device is something other than a hard disk. If your
bus-mastering device is something other than a hard disk the
solutions above, especially #1, are your only options.
If your bus-mastering hard disk controller uses a VDS device
driver that is loaded after QEMM386.SYS, QEMM will still create a
2K disk buffer, because the VDS support will not be in place at
the time that QEMM loads. This disk buffer will be necessary in
most circumstances, because the Optimize program would otherwise
fail when it tried to load the VDS driver into High RAM.
However, you may wish in this circumstance to reduce the size of
the disk buffer as much as possible by placing the DISKBUF=1
parameter on the QEMM386.SYS device driver line. The smaller
disk buffer is preferable here, because the disk buffer will
never again be used after the VDS driver loads, and a bigger disk
buffer uses valuable conventional memory.
If you are both disabling automatic disk buffering (with the
DISKBUF=0 parameter) and creating a disk buffer for the page
frame (with the DISKBUFFRAME=xx parameter), you must place the
DISKBUF=0 parameter before the DISKBUFFRAME=xx parameter on the
QEMM386.SYS line in the CONFIG.SYS file. If you reverse this
ordering, automatic disk buffering will still be disabled, but
the disk buffer for the page frame will not be created.
MAKING SURE YOUR DEVICE DRIVER LOADS LOW
Q. I've read the sections above. I don't have a VDS driver, and
I think that my proprietary device driver or my disk cache should
be loaded low. How do I prevent it from loading high?
For double-buffering to work properly, the device driver for your
bus-mastering hardware must be loaded in conventional memory,
where physical and logical addresses are almost always the same.
You must therefore make sure that it loads low if you are
depending on it to provide DMA buffering. We will use SMARTDRV as
an example of such a program; change the instructions below to
fit your device driver.
Ensure that there is no LOADHI command preceding SMARTDRV on the
line which loads it.
OPTIMIZE will very likely try to load SmartDrive high, unless you
tell OPTIMIZE not to do so. This is most easily done in the
following way:
1) Using a text editor, create a text file called OPTIMIZE.EXC in
the QEMM directory. Note that EXC (not EXE) is the extension on
the file name. If such a file exists already, simply open it for
editing.
2) Put a line in OPTIMIZE.EXC that says:
SMARTDRV
Do not specify a pathname nor an extension to the filename.
3) From now on, OPTIMIZE will not affect the SMARTDRV line in
either CONFIG.SYS or AUTOEXEC.BAT. As long as SMARTDRV is not
being loaded high already, it will not load high.
It is possible that your bus-mastering device was shipped with a
VDS driver. Bus-mastering hard disk controllers are starting to
ship with drivers that make VDS calls, and these drivers do not
require the DB parameter or any other buffering. We expect that
most bus-mastering devices will eventually include VDS drivers
and therefore will not exhibit any problems when run in Virtual
8086 mode.
******************************************************************
*This technical note may be copied and distributed freely as long
*as it is distributed in its entirety and it is not distributed
*for profit. Copyright (C) 1990-93 by Quarterdeck Office Systems
************************ E N D O F F I L E *******************